//525.连续数组
class Solution {
public:
    int findMaxLength(vector<int>& nums) {
        //依旧是使用前缀和,使用前缀和统计每个位置中1比0多的数量
        //遍历每个位置,与当前位置一样：1比0差的个数相等的位置,就是区间的长度
        //找出最大区间即可
        int n = nums.size();
        int tmp = 0 ,ret = 0;
        unordered_map<int,int> m;   //记录前面已经遍历的位置的1,0差值,并记录第一次出现的位置
        m.insert({0,-1});           //区间是(left,right]所以
        for(int i = 0; i < n ;i++)
        {
            tmp += (nums[i]==1?1:-1);
            if(m.count(tmp)) ret = max(ret,i-m[tmp]);   //更新答案
            else m[tmp] = i;                            //还没出现过这样的01关系
        }
        return ret;
    }
};